Computer software is ubiquitous. Much of the software in use today is derived from software which was first developed years or even decades ago. As such software has been modified, and due to the amount of time which has passed since the software was first developed, important documentation for such software is often missing. As a result, it can be very difficult to review the software and make corrections or additions that require knowledge of the software source code. This is especially problematic in situations in which the software is in continuous use, which is the case with much software running on larger computer systems, such as IBM mainframe computers.
The computer source code is required in order to thoroughly review and analyze programs with many lines of code. Without the source code, it can be necessary to rewrite the software in order to resolve problems, or make changes to the program. Rewriting software is expensive, time consuming and difficult, and may lead to additional problems such as new errors. There is also the consideration that such replacement software must often times work with other existing software, and accomplishing an effective interface between the two may be impossible without the source code for the existing software.